package com.interview.three;

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;

public class TestFinalizer {
    public static void main(String[] args) throws IOException, InterruptedException {
        new Dog("1");
        new Dog("2");
        new Dog("3");
        System.gc();;
        Thread.sleep(10);
        // System.in.read();
    }
    
    /*
    * 1-从日志看到，finalize方法的调用顺序并不能保证
    * 2-Finalizer的线程调用了finalize()方法
    * 3- 注释掉 System.in.read(); 大概率下，什么也不会打印，也就是说finalize中的代码不能保证被执行
    * 4-finalize出现异常，并不会有异常输出
    * 5-gc之后，会立即调用 finalize方法吗
    * 
    * */
    
    @Slf4j
    private  static class Dog{
        private String name;

        public Dog(String name) {
            this.name = name;
        }

        @Override
        protected void finalize() throws Throwable {
            log.info("{}被回收了",name);
            int a= 1/0;
        }
    }
}
